package com.eugenema.handler;

import java.util.concurrent.TimeUnit;
import com.eugenema.entity.TestStep;
import com.eugenema.util.ConfigUtil;
import com.eugenema.util.SeleniumUtil;
import org.openqa.selenium.By;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 打开网址处理器
 *
 * @author Eugenema
 * @date 2023/3/11 13:02
 *
 **/
public class OpenUrlActionHandler {
	private Logger logger = LoggerFactory.getLogger(OpenUrlActionHandler.class);
	/** 403 异常标志元素 */
	private static final String ERROR_403 = "/html/body/center[1]/h1";

	/**
	 * Web 端打开网站链接操作，并设置全局等待时间
	 * <br/>若遇到 403 异常，则等待后刷新界面，直至正常访问
	 *
	 * @author Eugenema
	 * @date 2023/3/11 13:02
	 *
	 * @param testStep 执行动作
	 *
	 **/
	public void openUrl(TestStep testStep) throws InterruptedException {
		/** 重试次数 */
		int i = 1;
		//设置初始等待时间
		SeleniumUtil.getDriver().manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
		do {
			//打开网页
			SeleniumUtil.getDriver().get(testStep.getValue());
            try {
            	//判断是否访问受限
				SeleniumUtil.getDriver().findElement(By.xpath(ERROR_403));
            } catch (Exception e) {
            	//访问未受限，设置全局等待时间，直接返回
				SeleniumUtil.getDriver().manage().timeouts().implicitlyWait(Long.parseLong(ConfigUtil.getProperty(ConfigUtil.WAIT_TIME)), TimeUnit.MILLISECONDS);
                return;
            }

			//访问受限，等待下次重试时间
			Thread.sleep(Long.parseLong(ConfigUtil.getProperty(ConfigUtil.RETRY_TIME)));
            logger.error("访问被限制，第{}次重试……", i++);
        } while (i < Integer.parseInt(ConfigUtil.getProperty(ConfigUtil.RETRY_MAX_TIMES)));
	}
}
